<?php

define('TZ', "Etc/GMT-6");
date_default_timezone_set(TZ);

define('DEBUG',false);
define('VERBOSE_DEBUG',false);

//http://stackoverflow.com/questions/505338/get-and-url-rewriting-for-php
//var_dump();




function conectarDB($host = "localhost",$username="root",$password="",$database="webservice"){
  $DB_LINK = mysql_connect($host, $username, $password);
  mysql_select_db($database);
  if (!$DB_LINK) {
    die('Could not connect: ' . mysql_error());
  }

  return $DB_LINK;

}

function fallo_result($result,$muere_void = true){
  if (!$result) {
    $message  = 'Invalid query: ' . mysql_error() . "\n";
    $message .= 'Whole query: ' . $query;
    die($message);
  }
  if (is_bool($result)){
    return $result;
  }
  if (mysql_num_rows($result) == 0 && $muere_void) {
    echo "No rows found, nothing to print so I'm exiting";
    exit;
  }
}

/**
 * Maneja el pedido de credito
 */
function peticion_credito($num_tarj, $cantidad, $fecha, $tipo, $ent, $descripcion, $codigo_seg){
  $DB_LINK = conectarDB();
  $query = sprintf("SELECT monto FROM Tarjeta WHERE id_tarjeta=%s",
                  mysql_real_escape_string($num_tarj));
  if (VERBOSE_DEBUG) {print($query);}
  $result = mysql_query($query);
  fallo_result($result,false);
  $status = "1";
  $motivo = "valido";
  if (mysql_num_rows($result) == 0){
    $status = "0";
    $motivo = "tarjeta inexistente";
  }
  else {
    $row = mysql_fetch_assoc($result);
    if ($row["monto"]<$cantidad){
      $status = "-1";
      $motivo = "credito excedido";
    }
  }
  $id_transaccion = md5($fecha.$num_tarj.$cantidad.$descripcion);
  //TODO: verificar el codigo de seguridad
  //ahora toca insertar
  $query = sprintf("INSERT INTO Transaccion (id_transaccion, fecha, id_tarjeta, status, monto, descripcion, empresa) VALUES ('%s','%s',%s,%s,%s,'%s',%s)",
                  $id_transaccion,
                  date("Y-m-d", strtotime(mysql_real_escape_string($fecha))),
                  mysql_real_escape_string($num_tarj),
                  $status,
                  mysql_real_escape_string($cantidad),
                  mysql_real_escape_string($descripcion),
                  mysql_real_escape_string($ent)
                  );
  if (VERBOSE_DEBUG) {print($query);}
  $result = mysql_query($query);
  ?>
<pedido_credito>
  <transaccion_id><?php echo($id_transaccion); ?></transaccion_id>
  <status><?php echo($status); ?></status>
  <motivo><?php echo($motivo); ?></motivo>
</pedido_credito>
  <?
  mysql_close($DB_LINK);
}

/**
 * Confirma si la peticion de credito fue acceptada
 */
function confirmacion_credito($transaccion_id, $entidad_id){
  $DB_LINK = conectarDB();
  $query = sprintf("SELECT id_transaccion, id_tarjeta, status, descripcion FROM Transaccion where id_transaccion=%s LIMIT 1",
          mysql_real_escape_string($transaccion_id));
          //mysql_real_escape_string($entidad_id));
  if (VERBOSE_DEBUG) {print($query);}

  $result = mysql_query($query);
  fallo_result($result);
  $row = mysql_fetch_assoc($result)
  ?>
<confirmacion_credito>
  <transaccion_id><?php echo($row['id_transaccion']); ?></transaccion_id>
  <status><?php echo($row['status']); ?></status>
  <descripcion><?php echo($row['descripcion']); ?></descripcion>
</confirmacion_credito>
  <?php
  // print($row['id_transaccion']); print($row['tarjeta']); print($row['status']); print($row['descripcion']);
  mysql_close($DB_LINK);
  exit;
}

function consulta_entidad($entidad_id){
  $DB_LINK = conectarDB();
  $query = sprintf("SELECT Transaccion.id_transaccion, Tarjeta.empresa,
    Tarjeta.id_tarjeta, Transaccion.fecha, Transaccion.monto
    FROM Transaccion INNER JOIN Tarjeta
    ON Transaccion.id_tarjeta = Tarjeta.id_tarjeta
    WHERE Transaccion.empresa = %s;",
    mysql_real_escape_string($entidad_id));
  if (VERBOSE_DEBUG) {print($query);}
  $result = mysql_query($query);
  fallo_result($result,true);
  print("<pagos>\n");
  while ($row = mysql_fetch_assoc($result)){
    printf(
"  <pago>
    <tarjeta>%s</tarjeta>
    <tipo>%s</tipo>
    <fecha>%s</fecha>
    <cantidad>%s</cantidad>
   </pago>\n",$row['id_tarjeta'],$row['empresa'],$row['fecha'],$row['monto']);
  }
  print("</pagos>\n");
  mysql_close($DB_LINK);
  exit;
}

function consulta_rechazados($entidad_id){
  $DB_LINK = conectarDB();
  $query = sprintf("SELECT Transaccion.id_transaccion, Tarjeta.empresa,
    Tarjeta.id_tarjeta, Transaccion.fecha, Transaccion.monto
    FROM Transaccion INNER JOIN Tarjeta
    ON Transaccion.id_tarjeta = Tarjeta.id_tarjeta
    WHERE Transaccion.empresa = %s AND Transaccion.status < 1;",
    mysql_real_escape_string($entidad_id));
  if (VERBOSE_DEBUG) {print($query);}
  $result = mysql_query($query);
  fallo_result($result,true);
  print("<solicitudes>\n");
  while ($row = mysql_fetch_assoc($result)){
    printf(
"  <solicitud_rechazada>
    <tarjeta>%s</tarjeta>
    <tipo>%s</tipo>
    <fecha>%s</fecha>
    <cantidad>%s</cantidad>
   </solicitud_rechazada>\n",$row['id_tarjeta'],$row['empresa'],$row['fecha'],$row['monto']);
  }
  print("</solicitudes>\n");
  mysql_close($DB_LINK);
  exit;
}

/**
 * En caso que la llave URL no exista, es decir fue accedida la raiz.
 */
if (!array_key_exists("url",$_GET) && !VERBOSE_DEBUG){
  echo(file_get_contents("api_doc.html"));
  return;
}
/**
 * partimos el url en los metodos usados
 */
$method=explode('/',$_GET["url"]);

//var_dump($_GET);

if ($method[0]=="credito" && $method[1]=="peticion"){
  if (array_key_exists("numero_tarjeta", $_GET) &&
      array_key_exists("cantidad",       $_GET) &&
      array_key_exists("fecha",          $_GET) &&
      array_key_exists("tipo",           $_GET) &&
      array_key_exists("ent",            $_GET) &&
      array_key_exists("descripcion",    $_GET) &&
      array_key_exists("codigo_seg",     $_GET)){
    $num_tarj  = $_GET["numero_tarjeta"];
    $cantidad  = $_GET["cantidad"];
    $fecha     = $_GET["fecha"];
    $tipo      = $_GET["tipo"];
    $ent       = $_GET["ent"];
    $desc      = $_GET["descripcion"];
    $codigo_seg= $_GET["codigo_seg"];

    peticion_credito($num_tarj, $cantidad, $fecha, $tipo, $ent, $desc, $codigo_seg);
  }
  else{
    die("fallo de parametros");
  }
}

if ($method[0]=="credito" && $method[1]=="confirmacion"){
  if (array_key_exists("transaccion_id", $_GET) && array_key_exists("ent", $_GET)) {
    $transaccion_id = intval($_GET["transaccion_id"]);
    $entidad_id = intval($_GET["ent"]);
    confirmacion_credito($transaccion_id,$entidad_id);
  }
  else{
    die("fallo de parametros");
  }
}

if ($method[0]=="consulta" && $method[1]=="pagos"){
  if (array_key_exists("ent", $_GET)) {
    $entidad_id = intval($_GET["ent"]);
    consulta_entidad($entidad_id);
  }
  else{
    die("fallo de parametros");
  }
}

if ($method[0]=="consulta" && $method[1]=="rechazados"){
  if (array_key_exists("ent", $_GET)) {
    $entidad_id = intval($_GET["ent"]);
    consulta_rechazados($entidad_id);
  }
  else{
    die("fallo de parametros");
  }
}